home *** CD-ROM | disk | FTP | other *** search
/ Inside Mac Games Volume 7 #1 / IMG Vol 7-1.iso / Updaters / InputSprocket 1.3 / InputSprocket Developer Notes next >
Text File  |  1998-04-16  |  21KB  |  459 lines

  1. InputSprocket 1.3
  2. Release Notes
  3. -------------------
  4. General Release Notes:
  5.  
  6. Although not a change, a clarification is needed on how exclusive items operate
  7. particularly with regards to hat-type switches (direction-pads, digital
  8. joysticks and hat switches). A group of mutually exclusive items is a group of
  9. items where activation of one item automatically deactivates other items in the
  10. group. A group of mutually exclusive items might be assigned to a hat. An
  11. example is "look" functionality which allows the user to different directions
  12. from the cockpit in a flight simulator implemented as four different button
  13. needs. A problem will arise if the group of items only uses the activation of
  14. these buttons to select which item is active. This problem will only arise if
  15. the program in question does not properly handle combinations of the button
  16. activations.
  17.  
  18. For example, if I assign "look right" to the right item of a hat and "look
  19. forward" to the top item of a hat. Now, if I press right on the hat I will look
  20. right. If I now wiggle my thumb upwards so that up is activated (up and right
  21. are now simultaneously activated) I will look forward. If I slide my thumb back
  22. to the right, I will release the "look up" item, but since the "look right"
  23. item was activated the whole time, I do not reactivate the "look right"
  24. function. I now have my thumb holding the hat right, but I am looking forward.
  25.  
  26. In fact, since the "look right" item is already held down, it is the ONLY
  27. button on the entire controller which cannot be pressed and it becomes
  28. impossible to look right without releasing the hat and pressing it right again.
  29. Symptoms of this are that it is easier to look right by pressing forward and
  30. sliding right to the corner of the d-pad than it is to press right directly!
  31.  
  32. The only way to correct for this is to consider both presses (kISpButtonDown)
  33. and releases (kISpButtonUp) of any button needs which are exclusive. In this
  34. case, when right is pressed, the right function would be activated. When the up
  35. function is activated, both items are now activated. The InputSprocket client
  36. can either deactivate the original right function and switch to the up
  37. function, or it can remain with the right function and only switch to the up
  38. function when the right button is released. If the hat is moved to the right
  39. again and the up function is released, then the client should switch back to
  40. the right function if it has switched away.
  41.  
  42. Proper handling of releases for button needs will allow mutually exclusive
  43. functions to operate properly.
  44.  
  45. Before you ship any application, check to make sure you get no warnings when
  46. running with InputSprocketDebugLib and the debug versions of the drivers.
  47.  
  48. Changes from 1.2
  49. -----------------
  50.  
  51. A resource definition file "InputSprocket.r" has been added. You can use this
  52. file to create a Rez '.r' file to build the ISp resources into your
  53. application.
  54.  
  55. One of the templates is for the 'tset' resource created by the ISp keyboard
  56. driver. Note this templete is ONLY valid for a 'tset' generated by the
  57. keyboard. The only way to tell who created the 'tset' is to examine the 'setl'
  58. resource that points to it. The new sample code for DroneZone uses this
  59. template so that the defaults for the keyboard are in a Rez file and are
  60. easily updated when then application's list of needs changes. You still have
  61. recreate the sets for mice and gaming devices when your needs list changes
  62. during development, but not having to re-setup all the keyboard keys every
  63. time should be a big win. (Note: You may have to delete your InputSprocket
  64. Preferences file in order to get the new defaults from the application -- or
  65. change the subCreatorCode passed to ISpInit.)
  66.  
  67. New drivers have been added:
  68. InputSprocket CH Trackball: support for CH Trackballs
  69. InputSprocket Contour: support for the Contour Mouse
  70. InputSprocket MicroSpeed: support for MacTRAC and MouseDeluxe
  71. InputSprocket NoHands: support for the NoHands mouse
  72. InputSprocket ArenaMouse: support for the 'Arena' 3D mouse
  73. InputSprocket MacALLY: support for the MacALLY Joystick 
  74. InputSprocket USB: support for some USB devices on a Mac with USB
  75.  
  76. Special thanks to Jeremy Erwin who is not affiliated with MacALLY, for the 
  77. code to support the MacALLY stick.
  78.  
  79. In the debug folder, there is a new driver:
  80. InputSprocket NeedView: useful for debugging your application
  81.  
  82. All mice and keyboard drivers are 'passthru' in the debug versions. This
  83. means that it is VERY important you make sure you also test with the release
  84. versions of the drivers, since some things will work fine with the debug
  85. versions but not with the release drivers. On the other hand, you will never
  86. get stuck in the debugger without being able to type and/or move the cursor.
  87.  
  88. InputSprocket resets all elements to 'zero' values (symmetric axis are
  89. reset to the center) across suspend/resume. It is the responsibility of
  90. individual ISp drivers to push data to any elements which are non-default
  91. valued when the driver is reactivated.
  92.  
  93. ISp drivers must insure that they are Virtual Memory (VM) safe.
  94. InterruptTickle is only called at 'VM safe' times. However, ISp drivers must
  95. be aware of any callbacks they install directly, and whether they can occur
  96. during 'VM unsafe' times. If so then the ISp Driver is responsible for
  97. insuring that it is memory resident. Drivers which use ADB can include
  98. InputSprocketDefer.h and link to InputSprocketDeferLib which provides services
  99. so that ADB handlers are deferred until paging safe time. This way, the driver
  100. does not have to be held (although it will be resident under most conditions
  101. if it is actually being called many times a second). Drivers which use USB
  102. via USBHIDUniversalModule will automatically be deferred until 'VM safe'
  103. times, so do not have to worry about this problem.
  104.  
  105. Many minor bugs have been fixed.
  106.  
  107. 68K support has been added. 68K InputSprocket is only available through
  108. CFM-68K.
  109.  
  110. Some new constants were added to InputSprocket.h.
  111.  
  112. InputSprocket 1.2
  113. Release Notes
  114. -----------------
  115.  
  116. General Release Notes:
  117.  
  118. This release involves many minor improvements to the InputSprocket drivers, 
  119. including an improved user interface (UI) for axis. Some new drivers have 
  120. also been added. Several problems and bugs have been addressed.
  121.  
  122. A new resource has been defined (kISpApplicationResourceType = 'isap') which
  123. all
  124. applications which use InputSprocket should put (ID 0) in their resource fork.
  125. They should always set bit 0 (kISpAppResFlag_UsesInputSprocket) and set bit 1
  126. (kISpAppResFlag_UsesISpInit) if they use the high level API (ie they call
  127. ISpInit, ISpConfig, etc... in other words they have a needs list). The rest of
  128. the bits and reserved fields should be set to 0.
  129.  
  130. A new ISpElementKind has been added: kISpElementKind_Delta which specifies
  131. a Fixed point number of inches moved. InputSprocket Mouse and 
  132. InputSprocket Kensington now register elements of this kind in the low level. 
  133. The high level (through ISpConfigure) supports axis as well as delta kinds.
  134. This kind is very useful if you want to control a cursor.
  135.  
  136. A new definition of ISpNeed can be used by defining USE_OLD_ISPNEED_STRUCT to
  137. 0.
  138. The first reserved field (a short) was changed to two UInt8s: playerNum and
  139. group. Use playerNum to tell the driver some needs are related to a particular
  140. player (on the same machine). The SprocketInvaders source code will be reved to
  141. use this field. Group is used to group items together, such as a look up, look
  142. down need (assuming you can't use an axis). You should also group items
  143. together
  144. that have the same effect, but are 'tuned' button, axis, and delta versions.
  145. The
  146. current ISp drivers do not use this hinting, yet. Some new definitions for the 
  147. ISpNeedFlagBits have been added. If you use the new definition, make sure you 
  148. check your code for cases where you were initializing the struct. You now may 
  149. be misaligned, and many compilers will NOT generate a warning.
  150.  
  151. High Level Release Notes:
  152.  
  153. InputSprocket needs a 640x480 display (or larger) in order for its dialog to
  154. work.  
  155. If you are asking DrawSprocket for a smaller display size than that you should 
  156. switch out before calling InputSprocket.
  157.  
  158. Information about how to get saved sets ('setl' Resources) to work is below
  159. under the InputSprocket 1.0 Release Notes
  160.  
  161. AbsoluteTime and UnsignedWide are in the latest types.h (ETO #20 or later).
  162. /*typedef UnsignedWide AbsoluteTime; struct UnsignedWide {UInt32 hi;UInt32
  163. lo;};*/
  164.  
  165. InputSprocket Mouse supplies pseudo-buttons in the high level for modifier
  166. keys in combination with mouse clicks. You will have at least four buttons
  167. (where some may actually be command/shift/control/option-click on 
  168. one-button mice) for any mouse device. This should make it straightforward
  169. to port games which expect a two button mouse: use ISp with delta and
  170. button needs -- and dont worry about what type of device the user has.
  171.  
  172. Changes from 1.1
  173. -----------------
  174. - InputSprocket Speech added back to distribution (crashing bug fixed)
  175. - InputSprocket Gravis supports Blackhawk and uses new UI (new save set format)
  176. - InputSprocket Thrustmaster uses new UI (new save set format)
  177. - InputSprocket Joy completely revised, renamed InputSprocket CH, now supports
  178. multiple devices seperately and supports up to 8 buttons and 4 hats per device
  179. (new save set format)
  180. - InputSprocket Kensington added, supports kensington devices regardless
  181. of their software
  182. - InputSprocket Sidewinder 3D Pro added, supports Microsoft Sidewinder joystick 
  183. - InputSprocket AppleJack added, supports Pippin/AppleJack controller
  184. - InputSprocket Keyboard supports modifier keys in conjunction with a normal
  185. key
  186. (now either Escape or Cmd-Q are valid for kISpElementLabel_Btn_PauseResume)
  187. - Device and element strings have been reviewed, and some have been changed
  188. - ISpConfigure saves and restores the port.
  189. - A new function: ISpTimeToMicroseconds has been added.
  190. - There are some new bits defined for ISpNeedFlagBits. 
  191. - Some new element labels have been added.
  192. - Old saved sets for devices other than mouse and keyboard do not work
  193.  
  194. Incomplete list of devices input sprocket supports
  195. --------------------------------------------------
  196. - Thrustmaster FCS, Thrustmaster WCS, Thrustmaster RCS
  197. - Gravis Gamepad, Gravis Firebird, Gravis Mousestick II, Gravis Blackhawk
  198. - CH Jetstick, CH Flightstick Pro, CH Pro Pedals, CH Pedals, CH F16
  199.   Fighterstick, CH Gamepad, CH Pro Throttle
  200. - Kensington TurboMouse 4.0, TurboMouse 5.0, Thinking Mouse, 
  201.   Kensington Mouse, CoStar Stringray trackball
  202. - Microsoft SideWinder 3D Pro
  203. - AppleJack/ Pippin Controller
  204. - Speech Recognition
  205. - Keyboard
  206. - traditional Apple 'id handler 1' mouse and 100% compatable mice
  207. - modern 'id handler 4' mice including Logitech Trackman Marble (see the
  208. technote "Space Aliens Ate My Mouse")
  209.  
  210. Known Problems in 1.2
  211. ---------------------
  212. - Kensington Mouse-in-a-box reports two buttons (only the first one works)
  213. - ALPS GlidePoint does not appear if ALPS software is installed (appears w/o
  214.   ALPS software)
  215. - Mouse Systems Mouse does not appear if Mouse Systems software ('3-Button
  216.   Power') is installed (appears as 1 button mouse w/o Mouse Systems software)
  217. - CH Trackball PRO does not appear
  218. - Thrustmaster software generates keyDowns if so configured with ThrustWare
  219. (fix
  220.   is to configure all buttons to do nothing in ThrustWare)
  221. - Machines based on the Tanzania motherboard (Motorola StarMax, APS MPower,
  222.   Apple PowerMacintosh 4400) will always show an extra Mouse device for the
  223.   PS/2 mouse regardless whether one is plugged in (even though the 4400 has
  224.   no PS/2 ports, the phantom ADB devices for them are still created). The
  225.   PS/2 mouse only reports one button.
  226. - When a Sidewinder 3D Pro stick is connected, an extra mouse device is shown
  227.   which is active when the 'mouse/joystick' switch is switched to 'mouse'.
  228. - It is unstable to have multiple applications use InputSprocket 
  229.   simultaneously. If your application can be suspended and uses InputSprocket 
  230.   you should use ISpShutdown and ISpStartup so that InputSprocket is off while
  231.   you are in the background.  This is a bug (since 1.0) and will be fixed
  232.   in the next version.  If you are a user you can work around this problem
  233.   by not running more than one InputSprocket application at the same time.
  234. - When debugging, you may need to deactivate the Mouse and Keyboard drivers in
  235.   order to be able to interact with your debugger.
  236.  
  237. InputSprocket 1.1
  238. Release Notes
  239. -----------------
  240.  
  241. General Release Notes:
  242. We recommend that if you are using input sprocket version greater than 1.02
  243. that
  244. you no longer support any third party joystick APIs.
  245. You must not support those APIs at the same time as you have InputSprocket
  246. devices enabled.
  247.  
  248. High Level Release Notes:
  249. If you are using InputSprocket via the high level (ISpConfigure and ISpInit and
  250. so on).  We recommend that you only use the axis and button data types and
  251. build
  252. the controls that you need out of those types.  This will get you the best
  253. support.  Many of the drivers are going to only primarily emulate those
  254. datatypes.
  255.  
  256.  
  257. Known Problems in 1.1
  258. ---------------------
  259. - Kensington Trackball does not appear if Kensington software is installed
  260. (appears w/o Kensington software)
  261. - ALPS GlidePoint does not appear if ALPS software is installed (appears w/o
  262. ALPS software)
  263. - Mouse Systems Mouse does not appear if Mouse Systems software ('3-Button
  264. Power') is installed (appears as 1 button mouse w/o Mouse Systems software)
  265. - CoStar Stingray Trackball does not appear if CoStar software ('Stingray') is
  266. installed (appears w/o CoStar software)
  267. - CH Trackball PRO does not appear
  268. - Thrustmaster software generates keyDowns if so configured with ThrustWare
  269. (fix
  270. is to configure all buttons to do nothing in ThrustWare)
  271.  
  272. Changes from 1.02
  273. -----------------
  274. - new APIs (ISpStartup, ISpShutdown, ISpTickle, ISpDevices_ActivateClass,
  275. ISpDevices_DeactivateClass)
  276. - some general ui improvements in both appearance and performance have been
  277. made
  278. - new driver InputSprocket Joy (supports some features of JoyManager devices --
  279. ie mainly CH products)
  280. - new driver InputSprocket Thrustmaster (supports FCS, WCS, RCS)
  281. - new driver InputSprocket Gravis (supports MouseStick, Firebird, GamePad)
  282. - new driver InputSprocket Speech (you must activate explicitly and requires
  283. ISpTickle be called)
  284. - InputSprocket Mouse changed to have new UI and is implemented via ADBMgr
  285. directly instead of a CursorDeviceMgr Patch
  286. - InputSprocket Keyboard has been slightly changed if there is only one page
  287. - driver function to plot icons has been changed (faster)
  288. - bug when you select a 0 length name to save a set has been fixed
  289. - bug involving choosing monitor has been fixed (might chose something other
  290. than the main monitor randomly)
  291. - CH Flightstick, CH Gamepad, CH Jetstick and MacEnjoy no longer generate a
  292. mouse device
  293. - a crashing bug involving multiple applications using input sprocket
  294. simultaniously has been fixed
  295. - a very small memory leak involving ISpConfigure has been fixed
  296. - DONT_USE_OLD_INPUT_SPROCKET_LABELS changed to USE_OLD_INPUT_SPROCKET_LABELS
  297. in
  298. InputSprocket.h
  299. - a bug where InputSprocket Keyboard and InputSprocket Mouse called InitGraf
  300. has
  301. been fixed
  302.  
  303. InputSprocket Speech Notes
  304. --------------------------
  305. - you must call ISpTickle in order for InputSprocket Speech to work
  306. - you must call ISpDevices_ActivateClass(kISpDeviceClass_SpeechRecognition) to
  307. turn InputSprocket Speech on
  308. - requires SpeechRecognition extension 1.5.1 (PlainTalk 1.5)
  309.  
  310. InputSprocket Joy Notes
  311. -----------------------
  312. - supports all JoyManager devices as a single input sprocket device.
  313. - UI may show popups for controls the device does not have
  314. - JoySimpleData based
  315. - only supports the trigger and three additional buttons
  316. - digital pointing devices (ex. CH Gamepad's pad) are treated as a pair of axis
  317. not a POV Hat
  318.  
  319. InputSprocket 1.02
  320. Release Notes
  321. -----------------
  322.  
  323. There is a new InputSprocket.h that has new versions of the names for the
  324. labels
  325. as well as additional labels.
  326.  
  327. The following bugs were fixed in the 1.01 or the 1.02 releases.
  328. - keyboard ui now generates better names than Min/Max for axis if ElementLabel
  329. is useful
  330. - various problems with alignment and growing of dialog were fixed
  331. - flickering with icons in thrustmaster and mouse fixed
  332. - stub library included in this release with file type 'stub'
  333. - axis flipping check box now works again for the mouse driver
  334. - ISpDevices_Extract functions no work when an exact count is passed to them
  335. - Icon plotting is more robust.
  336. - The OK button is no longer hilited when the keyboard is active.
  337. - InputSprocket will now unload the drivers when the last fragment is unloaded
  338. - InputSprocket no longer leaks memory when you quit in the suspended state
  339. - when there are no devices to configure and ISpConfigure is called it will
  340. display a warning instead of doing nothing
  341. - ISpSuspend no longer leaks 10,000 bytes every call
  342.  
  343. The following bugs are known:
  344. -There is an incompatability with the mouse driver and the Kensignton trackball
  345. software that causes no mice devices to appear.
  346. -There is a incompatability with the Kensington trackball that causes an extra
  347. mouse device to appear when the hardware is installed and the software is not
  348. installed.
  349.  
  350. InputSprocket 1.0
  351. Release Notes
  352. -----------------
  353.  
  354. Please report all bugs to sprockets@adr.apple.com!
  355.  
  356. Release Components
  357. ------------------
  358.  
  359. InputSprocket Release Notes                - this file
  360. InputSprocket.h                            - the header file to compile with
  361. InputSprocketLib                        - release version of the library
  362. InputSprocketDebugLib                    - debugging version of the library
  363. InputSprocketStubLib                    - version of the library to link to
  364. InputSprocket Keyboard                    - keyboard plug-in
  365. InputSprocket Mouse                        - mouse plug-in
  366. InputSprocketTest                        - test program
  367. InputSprocketTest.µ                        - Metrowerks 8 project to build test
  368. InputSprocketTest Sources                - sources for test program
  369.  
  370. Place InputSprocket Keyboard, InputSprocket Mouse and InputSprocketLib or
  371. InputSprocketDebugLib in the Extensions folder.  Place InputSprocket.h in
  372. your development environment's C Headers folder.  Place InputSprocketStubLib
  373. in your development environment's Libraries folder.
  374.  
  375. WARNING: don't place both the debugging and non-debugging versions of the
  376. library in the search path or you will not be sure which version you will be
  377. using.
  378.  
  379. Dependencies
  380. ------------
  381.  
  382. InputSprocket requires the latest Universal Headers -- version 2.1.2 or later.
  383. You can find them on E.T.O. #20, the MacOS SDK CD-ROMs, Apple's web-site, or
  384. a number of other locations.  If you have a problem with the "AbsoluteTime"
  385. type usage, then you aren't using the latest Types.h file.
  386.  
  387. Compatability with Prereleases
  388. ------------------------------
  389.  
  390. InputSprocket 1.0 is not compatible with any of the pre-release versions of
  391. InputSprocket.  You should throw out all DR versions.
  392.  
  393. Changes to 'setl' Resource
  394. --------------------------
  395.  
  396. The format for the set list resource ('setl') was changed at the last minute.
  397. A resedit TMPL resource is automatically installed in the preference file and
  398. the format is as follows:
  399.  
  400. -- header --
  401. Version                (4 bytes)        The current version is now 2.
  402. Count                (4 bytes)
  403.  
  404. -- each entry --
  405. name                (64 bytes)        A pascal string
  406. set length            (4 bytes)        The length of the set
  407. device class        (4 bytes)        The device class of the device
  408. device identifier    (4 bytes)        The device identifier of the device
  409. flags                (4 bytes)        Same flags as in the header
  410. reserved1            (4 bytes)        Reserved by apple set to zero.
  411. reserved2            (4 bytes)        Reserved by apple set to zero.
  412. reserved3            (4 bytes)        Reserved by apple set to zero.
  413. set resource id        (2 bytes)        The resource id of the set.
  414. reserved4            (2 bytes)        Reserved by apple set to zero.
  415.  
  416. Special Considerations
  417. ----------------------
  418.     
  419.     -    Your game should use the Escape key to pause and resume play.  The
  420.         element that corresponds to the Escape key is labelled
  421.         ISpElementLabel_Start.  If your game uses virtual elements then the
  422.         first button need that is labelled ISpElementLabel_Start is auto-
  423.         configured to the Escape key, and the user can't change this in
  424.         the ISpConfigure dialog.
  425.     
  426.     -    Your game may provide default and optional configurations for the
  427.         keyboard, the mouse and any other devices.  This is done by including
  428.         'setl' and 'tset' resources a resource file, such as the application's,
  429.         that is open when ISpInit and ISpConfigure are called.  Since the
  430.         format of the 'tset' resource is determined by the device, it is
  431.         easiest to use the configuration dialog to establish the desired
  432.         configurations then copy them from the Preferences file into your
  433.         resource file.
  434.         
  435.             1.    Remove the InputSprocket Preferences file from the Preferences
  436.                 folder.
  437.             
  438.             2.    Run your game, and invoke the ISpConfigure dialog.
  439.             
  440.             3.    Configure and save as many sets as you like for any and all
  441.                 devices.
  442.             
  443.             4.    Quit.
  444.             
  445.             5.    Use ResEdit to move the 'setl' and 'tset' resources to your
  446.                 resource file.
  447.             
  448.             6.    Edit the 'setl' resource using the 'TMPL' supplied in
  449.                 InputSprocketSimpleTest.rsrc.
  450.             
  451.             7.    Change the flags field to $00000002 for the default entry for
  452.                 a given device or $00000004 for any other entry for that
  453.                 device.
  454.             
  455.             8.    Again remove the InputSprocket Preferences file from the
  456.                 Preferences folder so you can test with a clean slate.
  457.             
  458.             9.    Rebuild your game and try out your new configurations.
  459.